Skip to content

读[跨终端Web]有感

徐凯 著 2014年6月第一版

写在最前

花了2个小时左右看完了这本书,这本书的出版时间有点早了,距现在有4年时间了,在前端行业里算是老书了。不过里面有的思想还是很好的。是一本好书。分享点我感觉挺好的知识点吧。

关于跨终端

实现跨终端的方式有很多种,如

  1. 响应式
  2. 多站点
  3. 多模板
  4. 多平台

PS:渐进增强和优雅退化依旧是重要的前端开发思想,问题要以移动优先。

响应式的瓶颈

响应式不能解决移动端DOM冗余的问题,JS脚本冗余也是问题。响应式还存在内在耦合性。响应式本质上是依靠CSS处理展现层面的差异。

多站点

什么意识呢,就是一个主域名的站点,有很多二级子域的站点。比如一个站点是example.com的PC端产品首页,它有很多地址,如:www.example.com、wap.example.com、m.example.com、hd.example.com、iphone.example.com、ipad.example.com等。但是子域名太多会加大服务器维护跳转的成本。

多模板

是响应式和多站点相结合的一种方案。多模板的的优点在于一个页面只有一个URL,无须服务器端复杂的URL映射规则和终端检测等手段进行跳转。

多平台

就是现在的Native App。

关于跨域存储

出于安全考虑,localhost存储的数据不能跨子域访问(即使修改document.domain),比如数据存在代理页b.com所在域,宿主页a.com通过与代理页的跨域通信存储数据,跨域通信使用的是postMessage,postMessage不会改写document.domain。

存储方案

使用store.js 地址:

store.js是一个跨终端、跨域的存储组件

  1. 稳定可靠,10亿级日调用次数的考研。
  2. 兼容IE6
  3. 完美支持移动浏览器
  4. 跨子域、主域的数据存取,且不改写document.domain
  5. 支持Object、Array等复杂对象存取

跨域方案

使用iframe加载代理页,数据存储在代理页所在的域下,需要实现宿主页与代理页之间的通信,postMessage + window.name

跨域本质上是通信问题,也就是建立通信通道。常见的跨域通信方案有:JSONP、Window.name、CORS、document.domain、postMessage等。具体的看我写的这篇文章。

  1. iframe场景下使用
  2. 不该写document.doomain
  3. 跨子域、跨主域
  4. 不使用flash

满足上面要求的只有postMessage、window.name

异常处理

如果代理页或者其他异常导致不能进行数据存取,那么success回调的参数为undefined。并不会阻塞回调,更不会导致整个流程的阻塞。这就是 电梯永远不会坏的思想,即所有的调用都只有success一个回调。

安全性

由于数据存储在代理页所在的域,数据可被所有能够加载代理页的宿主页面访问。所有要在服务端控制代理页面的访问来源。下面的设置可以限制第三方访问存储的数据

  1. 代理页部署至特定服务器,服务器控制访问来源(推荐采取白名单机制)
  2. 实例化Store设置代理页地址参数proxy

Released under the MIT License.